package com.czk.hiveutils.udf;

import org.apache.commons.lang.StringUtils;
import org.apache.hadoop.hive.ql.exec.UDF;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 打包后加入hive的jar包中，即可在客户端创建函数
 *
 * @description: hive自定义函数UDF 实现对手机号中间4位进行****加密
 * @author: CZK
 */
public class EncryptPhoneNumber extends UDF {
    /**
     * 重载evaluate方法 实现函数的业务逻辑
     *
     * @param phoNum 入参：未加密手机号
     * @return 返回：加密后的手机号字符串
     */
    public String evaluate(String phoNum) {
        String encryptPhoNum = null;
        // 手机号不为空 并且为11位
        if (StringUtils.isNotEmpty(phoNum) && phoNum.trim().length() == 11) {
            // 判断数据是否满足中国大陆手机号码规范
            String regex = "^(1[3-9]\\d{9}$)";
            Pattern p = Pattern.compile(regex);
            Matcher m = p.matcher(phoNum);
            if (m.matches()) {
                // 进入这里都是符合手机号规则的
                // 使用正则替换 返回加密后数据
                // 使用正则时，小括号括起来的是一组
                encryptPhoNum = phoNum.trim().replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");
            } else {
                // 不符合手机号规则 数据直接原封不动返回
                encryptPhoNum = phoNum;
            }
        } else {
            //不符合11位 数据直接原封不动返回
            encryptPhoNum = phoNum;
        }
        return encryptPhoNum;
    }
}
